package main

/**
125. 验证回文串
给定一个字符串，验证它是否是回文串，只考虑字母和数字字符，可以忽略字母的大小写。

说明：本题中，我们将空字符串定义为有效的回文串。
示例 1:

输入: "A man, a plan, a canal: Panama"
输出: true
解释："amanaplanacanalpanama" 是回文串
示例 2:

输入: "race a car"
输出: false
解释："raceacar" 不是回文串
提示：
1 <= s.length <= 2 * 105
字符串 s 由 ASCII 字符组成
*/
func isPalindrome(s string) (isPal bool) {
	l, r := 0, len(s)-1
	for l <= r {
		for (s[l] < 48 || (s[l] > 57 && s[l] < 65) || (s[l] > 90 && s[l] < 97) || s[l] > 122) && l < r {
			l++
		}
		for (s[r] < 48 || (s[r] > 57 && s[r] < 65) || (s[r] > 90 && s[r] < 97) || s[r] > 122) && l < r {
			r--
		}
		if s[l] > 47 && s[l] < 58 && s[l] != s[r] {
			return false
		}
		if s[l] > 64 && s[l] < 91 && (s[l] != s[r] && s[l]+32 != s[r]) {
			return false
		}

		if s[l] > 96 && s[l] < 123 && (s[l] != s[r] && s[l]-32 != s[r]) {
			return false
		}
		l++
		r--
	}
	return true
}
